home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / gnu / progutil / stdwin.zoo / alfa / scroll.c < prev    next >
C/C++ Source or Header  |  1989-10-17  |  1KB  |  50 lines

  1. /* Scrolling.
  2.    This is not meant to scroll the window with respect to the document
  3.    (that's done with wshow), but to say that a change has occurred
  4.    in the indicated rectangle for which a full update can be avoided
  5.    by scrolling its content by (dh, dv).
  6.    If we can't do such scrolls, we'll call wchange instead. */
  7.  
  8. #include "alfa.h"
  9.  
  10. void
  11. wscroll(win, left, top, right, bottom, dh, dv)
  12.     WINDOW *win;
  13.     int left, top;
  14.     int right, bottom;
  15.     int dh, dv;
  16. {
  17.     if (dh != 0 || left > 0 || right < columns) {
  18.         wchange(win, left, top, right, bottom);
  19.         return;
  20.     }
  21.     /* Convert to screen coordinates: */
  22.     top -= win->offset;
  23.     bottom -= win->offset;
  24.     /* Clip to window: */
  25.     if (top < win->top)
  26.         top= win->top;
  27.     if (bottom > win->bottom)
  28.         bottom= win->bottom;
  29.     /* Do the scroll: */
  30.     if (top < bottom) {
  31.         dv= -dv;
  32.         trmscrollup(top, bottom-1, dv);
  33.         /* Set the rectangle filled with 'empty' now: */
  34.         if (dv < 0) {
  35.             if (top-dv < bottom)
  36.                 bottom= top-dv;
  37.         }
  38.         else {
  39.             if (bottom-dv > top)
  40.                 top= bottom-dv;
  41.         }
  42.         /*
  43.         wchange(win, left, top+win->offset,
  44.             right, bottom+win->offset);
  45.         */
  46.         wchange(win, left, win->top+win->offset,
  47.             right, win->bottom+win->offset);
  48.     }
  49. }
  50.